// 1，boolen
let bool: boolean = true
// bool = 123 // 报错，不能将number赋值给boolen

// 2，number
let num: number = 1
num = 2
num = NaN // 比较特殊的
// b1 = '123' // 不能将字符串类型传递给number

// 3，string
let str: string = 'abc'

// 4,object (这里限制的为引用数据类型)
let  obj: object = {name: 'zs', age: 20}
obj = [1,2,3]
obj = function() {
    console.log(123);
    
} 

// 5,Array
let arr1: number[] = [1, 3, 5] // 定义arr为每一个元素都是数字的数组
let arr2:Array<number> = [ 12, 23, 45] // 每一个元素为数字的泛型方式
let arr3:string[] = ['123', 'abc'] // 每一个元素的类型为字符串

// 6，any 任意类型 
let any1: any = 123

// 7，void 现在问undefined，一般来说用于限制函数的返回值
function fun1(a: number): void { // 没有返回值
    console.log(a);
    
}
function fun2(b: number): number{ // 存在返回值
    console.log(b);
    return b
    
}
// 8，元组
let tuple1: [number, string] = [19, '王五']

// 9,枚举enum
let sex = 3
enum gender {
    man,
    woman,
    secrect
}
// console.log(gender);
if(sex === gender.man){
    console.log(sex);   
}else if(sex === gender.woman) {
    console.log(sex);
    
}
// 10，联合类型,使用属性时，必须使用两者共有的属性
// 如果非要使用某种类型，可以使用类型断言
let x:number | string = 123
// x = 'abc'
// 11, 类型断言
function getNum(a: number | string) {
    console.log((a as string).length); // 这里由于number没有length属性，所以如果你非常确定他是字符串类型，可以事应类型断言
}
let root = document.querySelector("#root") as HTMLElement
console.log(root);

// 12,类型推断， 根据赋值给他的类型，自动给他赋予响应的类型
let num2 = 123
let str2 = 'abc'














// 这个作用使其为一个独立的模块，避免变量冲突
export {}




